#include <vector>
#include <fstream>
#include <iostream>

using namespace std;

// 对以 (row, col) 为右下角的矩阵进行翻转
// flip 返回启用机器的次数
int flip(int row, int col, vector<vector<int>> &matrix) {
  // 只有 (row, col) 这个位置上的牛站歪了，我们才翻转
  if (matrix[row][col] == 1) {
    for (int i = 0; i < row; ++i) {
      for (int j = 0; j < col; ++j) {
        // 翻转 matrix[i][j]
        if (matrix[i][j] == 0) {
          matrix[i][j] == 1;
        }
        else {
          matrix[i][j] == 0;
        }
      }
    }

    // 翻转完了
    return 1;
  }

  return 0;
}


int main(int argc, char const *argv[])
{
  /* code */
  // 处理输入
  ifstream ifs("CowTipping.in");

  int n = 0;
  ifs >> n;

  vector<int> v(n, 0);
  vector<vector<int>> cows(n, v);

  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      ifs >> cows[i][j];
    }
  }

  // 初始情况，从检查整个矩阵的最右下角开始检查，
  // 只要发现右下角位置是歪的，就对整个矩阵进行翻转
  int row = n - 1;
  int col = n - 1;
  int result = 0; // 应用翻转机器的次数

  while (row >= 0 && col >= 0) {
    // 第一步、先对右下角位置进行检查和翻转，并把操作结果累加到 result
    result += flip(row, col, cows); // 1 - 翻转了； 0 - 没翻转

    // 第二步、当 row 和 col 不相等时，翻转完 (row, col) 为右下角的矩阵之后
    // 我们还要检查 (col, row) 为右下角的矩阵。

    if (row != col) {
      result += flip(col, row, cows);
    }

    // 第三步、只要 row 不等于 0，就向上移动一行。当 row 等于 0 时，
    // 就向左移动一列
    if (row != 0) {
      --row;
    }
    else {
      --col;
      row = col;
    }
  }

  // 当 while 循环结束，此时的 result 中记录的，就是应用翻转机器的次数了
  ofstream ofs("CowTipping.out");
  ofs << result;

  return 0;
}


